/**
 * 
 */
package com.cudex.negocio.daos;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceException;

import org.apache.log4j.Logger;
import org.hibernate.exception.ConstraintViolationException;

import com.cudex.negocio.beans.Empleado;

/**
 * @author Nicolas Bordenave
 * @date 21/11/2011
 * @version 1.0
 */

@Stateless
public class EmpleadoDAO implements IEmpleadoDAO {

	private static final long serialVersionUID = -1619245216539987640L;
	private static final Logger log = Logger.getLogger(EmpleadoDAO.class
			.getName());

	@PersistenceContext(unitName = "JPA_UNIT_CUDEX")
	EntityManager em;

	@Override
	public Boolean altaEmpleado(Empleado emp) throws Exception {
		Boolean result = false;
		log.info("guardando");
		try {
			em.persist(emp);
			result = true;
		} catch (ConstraintViolationException e) {
			// log.error("salvarTipo : ConstraintViolationException");
			throw e;
		} catch (PersistenceException e) {
			// log.error("salvarTipo : PersistenceException");
			throw e;
		} catch (Exception e) {
			throw e;
		}
		return result;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.cudex.negocio.daos.IEmpleadoDAO#modificarUsuario(com.cudex.negocio
	 * .beans.Empleado)
	 */
	@Override
	public Empleado modificarEmpleado(Empleado emp) throws Exception {
		log.info("modificarEmpleado()");
		Empleado objTmp = null;
		try {
			objTmp = em.merge(emp);
			em.flush();

		} catch (ConstraintViolationException e) {
			// log.error("modificarTipo : ConstraintViolationException");
			throw e;
		} catch (PersistenceException e) {
			// log.error("modificarTipo : PersistenceException");
			throw e;
		} catch (Exception e) {
			throw e;
		}
		return objTmp;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.cudex.negocio.daos.IEmpleadoDAO#activarEmpleado(java.lang.String)
	 */
	@Override
	public Boolean activarEmpleado(String code) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.cudex.negocio.daos.IEmpleadoDAO#buscarContacto(java.lang.String)
	 */
	@Override
	public Empleado buscarContacto(String email) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.cudex.negocio.daos.IEmpleadoDAO#buscarEmpleado(java.lang.String)
	 */
	@SuppressWarnings("unchecked")
	@Override
	public List<Empleado> buscarEmpleadoNombre(String nombre) throws Exception {
		try {
			Empleado objTmp = (Empleado) em
					.createNamedQuery("buscarEmpleadoPorNombre", Empleado.class)
					.setParameter("nombre", nombre).getSingleResult();
			return (List<Empleado>) objTmp;
		} catch (Exception e) {
			log.error(e.getCause());
			// e.printStackTrace();
			throw e;
		}
	}

	@Override
	public Empleado buscarEmpleado(Empleado emp) throws Exception {
		try {
			Empleado objTmp = (Empleado) em
					.createNamedQuery("buscarEmpleado", Empleado.class)
					.setParameter("Empleado", emp).getSingleResult();
			return objTmp;
		} catch (Exception e) {
			log.error(e.getCause());
			// e.printStackTrace();
			throw e;
		}
	}

	@Override
	public List<Empleado> buscarUsuarios() throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<Empleado> buscarRolUsuario(String user) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Empleado buscarUsuario(String usr, String pass) throws Exception {
		try {
			Empleado objTmp = (Empleado) em
					.createNamedQuery("buscarUsuarioLogin", Empleado.class)
					.setParameter("u", usr).setParameter("p", pass)
					.getSingleResult();
			return objTmp;
		} catch (Exception e) {
			log.error(e.getCause());
			// e.printStackTrace();
			throw e;
		}
	}

}
